﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using MapEngine;
using System.Collections.Generic;

namespace GameEngine.Model.Data
{
    public interface IViewVO<MyIdType> : IVO
        where MyIdType : IComparable<MyIdType>
    {
        IDictionary<IViewStateVO, IDictionary<IShapeVOId, IShapeVO>> Shapes { get; }
        IViewVOId<MyIdType> Id { get; }
        void AddShape(IShapeVO shape);
        void AddShape(IShapeVO shape, IViewStateVO state);
    }

    public class IViewVOConstants
    {
        public static ViewStateVO DefaultState = new ViewStateVO("default");
    }

    public interface IViewVOId<MyIdType> : IId<MyIdType> where MyIdType : IComparable<MyIdType> { }

    public interface IShapeVO : IVO
    {
        IShapeVOId Id { get; }
        IShapeTypeVOId TypeId { get; }
        object TypeModifiers { get; set; }

        //string Value { get; set; }
        Point3d Position { get; }
        Point3d Rotation { get; }
        Point3d Scale { get; }
    }

    public interface IShapeVOId : ISimpleId<string> { }

    /// <summary>
    /// To be parsed by the engine and transform into an UI
    /// </summary>
    public interface IShapeTypeVO : IVO
    {
        IShapeTypeVOId Id { get; }
    }

    public interface IShapeTypeVOId : ISimpleId<string> { }
}
